﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Diagnostics;
//Librerias Arquitectura
using Com.Binaria.Core;
using Com.Binaria.Core.Base;
using Com.Binaria.Core.Dto;
using Com.Binaria.Core.Util;
using Com.Binaria.Core.Datos;
using Com.Binaria.Core.Exceptions;
using Com.Binaria.Core.Enumeracion;
//Librerias Proyecto
using Com.Binaria.SISCOB.Funcional.DTO;
using Com.Binaria.SISCOB.DTO;
using Com.Binaria.SISCOB.DAO;

namespace Com.Binaria.SISCOB.Dom
{
/// <summary>
///	clase de cartola dom
/// </summary>
public partial class CartolaDom : ICartolaDom
{
	#region metodos publicos

	
	

    /// <summary>
    /// metodo que permite registrar elementos de tipo cartola en el sistema
    /// </summary>
    /// <param name="p_Contexto">informacion del contexto</param>
    /// <param name="p_Cartola">cartola a registrar (insertar, actualizar o eliminar)</param>
    /// <param name="p_Accion">Accion a realizar</param>
    public CartolaDTO ProbarRegistrar(ContextoDTO p_Contexto, CartolaDTO p_Cartola)
	{
        //Prefijo del Metodo
        const String MPREFIX = " [ProbarRegistrar]";
        //Resultado accion insertar
        List<CartolaDTO> listCartolaResultDTO = null;
        //CartolaDTO cartolaResultDTO = null;

        try
        {
            //Registro log de inicio del proceso
            Factoria.Log.Info(CLASS_PREFIX + MPREFIX + EnumMessagesEntry.Inicio);

            //Valida que exista informacion en el objeto
            AssertNull.notNullOrEmpty(p_Cartola);

            listCartolaResultDTO = BuscarCartolaFiltro(p_Contexto, new CartolaDTO() { Folio = p_Cartola.Folio, IdCuentaCorriente = p_Cartola.IdCuentaCorriente, FchEmision = p_Cartola.FchEmision });
            if (listCartolaResultDTO.Count == 0)
            {
                listCartolaResultDTO = RegistrarCartola(p_Contexto, new List<CartolaDTO>() { p_Cartola }, EnumRegistrarAccion.Agregar);
            }

            //Registro log de ejecucion el termino del metodo
            Factoria.Log.Info(CLASS_PREFIX + MPREFIX + EnumMessagesEntry.Termino);
        }
        catch (ManagerException me)
        {
            throw (me);
        }
        catch (ArquitecturaException ae)
        {
            throw (ae);
        }
        catch (Exception ex)
        {
            //Registro log de ejecucion con problemas
            Factoria.Log.Info(CLASS_PREFIX + MPREFIX + EnumMessagesEntry.Ejecucion_Problemas);
            //Genero error
            throw new ManagerException(Factoria.GetMessage("DOM_ERROR_NO_MANEJADO"), ex);
        }
        return listCartolaResultDTO[0];
    }


    /// <summary>
    /// Metodo que permite buscar los elementos de tipo cartola existentes
    /// </summary>
    /// <param name="p_Contexto">informacion del contexto</param>
    /// <param name="p_Filtro">informacion de filtrado para realizar la busqueda</param>
    /// <returns>objeto contenedor de la informacion generada por la accion ejecutada</returns>	
    public List<CartolaDTO> BuscarCartolaFiltroPaginado(ContextoDTO p_Contexto, CartolaDTO p_Filtro)
    {
        //Prefijo del Metodo
        const string MPREFIX = " [BuscarCartolaFiltroPaginado(ContextoDTO p_Contexto, CartolaDTO p_Filtro)]";
        //Crea lista de objetos de salida
        List<CartolaDTO> RespuestaBuscar = new List<CartolaDTO>();

        try
        {
            //Registro log de inicio del proceso
            Factoria.Log.Info(CLASS_PREFIX + MPREFIX + EnumMessagesEntry.Inicio);

            //Valida que exista informacion a insertar
            AssertNull.notNullOrEmpty(p_Filtro);

            //Obtengo la lista de objetos almacenados en la base de datos
            RespuestaBuscar = iCartolaDAO.FindPag(p_Filtro);

            //Registro log de termino OK del proceso
            Factoria.Log.Info(CLASS_PREFIX + MPREFIX + EnumMessagesEntry.Ejecucion_Ok);
            //Registro log de ejecucion el termino del metodo
            Factoria.Log.Info(CLASS_PREFIX + MPREFIX + EnumMessagesEntry.Termino);
        }
        catch (ManagerException me)
        {
            throw (me);
        }
        catch (ArquitecturaException ae)
        {
            throw (ae);
        }
        catch (Exception ex)
        {
            //Registro log de ejecucion con problemas
            Factoria.Log.Info(CLASS_PREFIX + MPREFIX + EnumMessagesEntry.Ejecucion_Problemas);
            //Genero error
            throw new ManagerException(Factoria.GetMessage("DOM_ERROR_NO_MANEJADO"), ex);
        }
        return RespuestaBuscar;
    }


    #endregion metodos publicos

	}//End class CartolaDom
}//End namespace





